ctxt->flags = 0;
ctxt->shared.flags = flags;
ctxt->shared.start_info_pfn = nr_pages - 3; /* metaphysical */
- ctxt->regs.cr_ipsr = 0; /* all necessary bits filled by hypervisor */
- ctxt->regs.cr_iip = vkern_entry;
- ctxt->regs.cr_ifs = 1UL << 63;
- ctxt->regs.ar_fpsr = xc_ia64_fpsr_default();
+ ctxt->user_regs.cr_ipsr = 0; /* all necessary bits filled by hypervisor */
+ ctxt->user_regs.cr_iip = vkern_entry;
+ ctxt->user_regs.cr_ifs = 1UL << 63;
+ ctxt->user_regs.ar_fpsr = xc_ia64_fpsr_default();
/* currently done by hypervisor, should move here */
/* ctxt->regs.r28 = dom_fw_setup(); */
ctxt->privregs = 0;
#define INSTR_POINTER(regs) (regs->rip)
#define STACK_ROWS 4
#define STACK_COLS 4
+#elif defined (__ia64__)
+#define FMT_SIZE_T "%016lx"
+#define STACK_POINTER(regs) (regs->r12)
+#define FRAME_POINTER(regs) 0
+#define INSTR_POINTER(regs) (regs->cr_iip)
+#define STACK_ROWS 4
+#define STACK_COLS 4
+/* On ia64, we can't translate virtual address to physical address. */
+#define NO_TRANSLATION
#endif
struct symbol {
printf(" gs: %08x\n", regs->gs);
}
+#elif defined(__ia64__)
+void print_ctx(vcpu_guest_context_t *ctx1)
+{
+ struct cpu_user_regs *regs = &ctx1->user_regs;
+
+ printf("iip: %016lx ", regs->cr_iip);
+ print_symbol(regs->cr_iip);
+ printf("\n");
+ printf(" sp: %016lx ", regs->r12);
+ printf(" b0: %016lx\n", regs->b0);
+ printf(" tp: %016lx ", regs->r13);
+ printf(" r1: %016lx\n", regs->r1);
+
+
+ printf(" r2: %016lx ", regs->r2);
+ printf(" r3: %016lx\n", regs->r3);
+ printf(" r4: %016lx ", regs->r4);
+ printf(" r5: %016lx\n", regs->r5);
+
+ printf(" r6: %016lx ", regs->r6);
+ printf(" r7: %016lx\n", regs->r7);
+ printf(" r8: %016lx ", regs->r8);
+ printf(" r9: %016lx\n", regs->r9);
+}
#endif
+#ifndef NO_TRANSLATION
void *map_page(vcpu_guest_context_t *ctx, int vcpu, size_t virt)
{
static unsigned long previous_mfn = 0;
}
}
}
+#endif
void dump_ctx(int vcpu)
{
}
print_ctx(&ctx);
- if (is_kernel_text(ctx.user_regs.eip))
+#ifndef NO_TRANSLATION
+ if (is_kernel_text(INSTR_POINTER((&ctx.user_regs))))
print_stack(&ctx, vcpu);
+#endif
ret = xc_domain_unpause(xc_handle, domid);
if (ret < 0) {
unsigned long sys_pgnr; /* System pages out of domain memory */
unsigned long vm_assist; /* VMASST_TYPE_* bitmap, now none on IPF */
- struct cpu_user_regs regs;
+ struct cpu_user_regs user_regs;
struct mapped_regs *privregs;
struct arch_shared_info shared;
struct arch_initrd_info initrd;